% Example LaTeX document for GP111 - note % sign indicates a comment
\documentclass[12pt,a4paper,oneside]{article}
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{float}
\usepackage[ruled,vlined]{algorithm2e}
\usepackage[backend=bibtex,style=verbose-trad2,natbib=true]{biblatex}


% Default margins are too wide all the way around. I reset them here
\setlength{\topmargin}{-.5in}
\setlength{\textheight}{9in}
\setlength{\oddsidemargin}{.125in}
\setlength{\textwidth}{6.25in}

\hypersetup{
    unicode=false,          % non-Latin characters in Acrobat’s bookmarks
    pdftoolbar=true,        % show Acrobat’s toolbar?
    pdfmenubar=true,        % show Acrobat’s menu?
    pdffitwindow=false,     % window fit to page when opened
    pdfnewwindow=true,      % links in new window
    colorlinks=true,       % false: boxed links; true: colored links
    linkcolor=black,          % color of internal links (change box color with linkbordercolor)
    citecolor=green,        % color of links to bibliography
    filecolor=magenta,      % color of file links
    urlcolor=cyan,          % color of external links
    linktoc=page
}

\begin{document}

\begin{titlepage}
\begin{flushright}
           \includegraphics[scale=0.30]{../images/univorleans.png}\\ 
                      Département Informatique
\end{flushright}
\vspace{30mm}
\begin{center}
\textbf{\huge{Documentation technique SIG }}\\
\vspace{8mm}
\begin{large}
	\textit{Jordan FONTORBE}\\
	\textit{Willy FRANÇOIS}\\
	\textit{Jérémy MOROSI}\\
	\textit{Jean-Baptiste PERRIN}
\end{large}

\end{center}
\begin{figure}[b!]
\begin{flushright}
~~\\ ~~\\ ~~\\ ~~\\ ~~\\ ~~\\ ~~\\
\large{Année : 2013-2014}
\end{flushright}
\end{figure}
\end{titlepage}

\newpage

\tableofcontents
\newpage

\section{Analyse}

\subsection{Commun}
\input{arbreDecisionAnalyse}
\subsubsection{Package data}
Le package \texttt{data} contient le modèle des données ainsi que les fonctions (SQL et XML) nécessaires au prétraitement des données.
\paragraph{Le modèle : \\}
Notre modèle correspond à la structure de notre base de données. Nous avons choisi de ne garder que les nœuds, les trous, les routes, les bâtiments, les bassins et les forêts. Ainsi nous retrouvons : \\
\renewcommand{\labelitemi}{$\bullet$}
\begin{itemize}
\item une classe \texttt{Node} contenant un \textit{id}, une \textit{latitude} et une \textit{longitude}. Cette classe caractérise un point de la carte et va permettre avec ses coordonnées de construire une route, un bâtiment, un bassin ou une forêt.
\item une classe \texttt{Road} contenant un \textit{id}, un \textit{nom} (pas obligatoire),  un \textit{type} (route secondaire, chemin, route piétonne, etc.), la liste des nœuds qui la constituent et sa \textit{géométrie}.
\item une classe abstraite \texttt{Structure} possédant un \textit{id}, un {nom} (pas obligatoire), la liste des nœuds qui constituent cette structure, sa géométrie ainsi que la liste de ses trous (peut être vide). Les classes héritant de \texttt{Structure} sont :
	\begin{itemize}
	\item la classe \texttt{Building}. Elle représente un bâtiment et a en plus une liste de tous ses nœuds proches (hors ceux constituant le bâtiment).
	\item la classe \texttt{Basin} décrivant un bassin (lac, étang, etc.)
	\item la classe \texttt{Forest} décrivant une forêt.
	\item la classe \texttt{Hole} décrivant un trou d'une structure. Elle possède en plus l'id de la structure à laquelle il appartient.
	\end{itemize}
\end{itemize}
Le modèle est représenté par le schéma ci-dessous :\\

\begin{figure}[H]
\centering
\resizebox{\linewidth}{!}{
\includegraphics{../images/communData.pdf}
}
\caption{Modèle}
\end{figure}

\paragraph{Le pré-traitement : \\}
Une étape de pré-traitement a été nécessaire. En effet lorsque nous avons récupéré les données \textit{OpenStreetMap} et importé dans une base de données (à l'aide de l'outil \textit{osm2pgsql}), nous avons dû récupérer seulement les informations qui nous étaient utiles. Ainsi nous avons créé 4 nouvelles tables correspondant à notre modèle (sig1337\_nodes, sig1337\_roads, sig1337\_holes et sig1337\_structures) avec seulement les informations nécessaires (coordonnées, géométrie, nom, ...). Cette génération se fait à l'aide de la classe \texttt{SQLCreate} du package \texttt{data.sql}. \\
Ensuite, les données vont être récupérées et parsées en XML. On retrouvera notamment les tags :
\begin{itemize}
\item \texttt{bassin}, contenant un nom, une liste de voisins, et les triangles permettant sa construction en \textit{OpenGL}.
\item \texttt{foret}, contenant un nom, une liste de voisins, et les triangles permettant sa construction en \textit{OpenGL}.
\item \texttt{batiment}, contenant un nom, une liste de voisins, et les triangles permettant sa construction en \textit{OpenGL}.
\item \texttt{route}, contenant la liste des points la décrivant et son type (chemin ou route pour une réprésentation différente sur la carte).
\end{itemize}

\newpage

\subsection{WebService}
Afin de permettre une utilisation de l'application en mode "remote", un \textit{WebService} a été mis en place. Aucune donnée (comme les bâtiments, les routes, l'arbre de décision) n'étant stockée sur le téléphone dans ce mode, c'est l'appel aux méthodes de ce \textit{WebService} qui va nous permettre de récupérer toutes les données nécessaires. \\
Il permet entre autre d'avoir accès à trois méthodes :\\
\begin{itemize}
\item Une méthode permettant de récupérer les informations de la carte au format XML, c'est-à-dire les nœuds, les routes et les structures ainsi que l'arbre de décision. Cette méthode sera appelée au lancement de l'application en mode "remote". Elle est accessible à partir de l'URL : http://\textit{IP\_ADRESS}:\textit{PORT}/WebService/service/map. La définition de cette méthode est présente dans la classe \texttt{MapService}.
\item Une méthode permettant à partir d'une latitude et d'une longitude, de récupérer le plus proche bâtiment. Elle sera appelée dans l'application Android, lors d'un appuie sur une zone de la carte afin de pouvoir sélectionner un bâtiment comme point de départ ou d'arrivée pour un itinéraire. Cette méthode est accessible à partir de l'URL : http://\textit{IP\_ADRESS}:\textit{PORT}/WebService/service/location/building/\{lat\}/\{lon\}. Elle est définie dans la classe \texttt{LocationService}.
\item Une méthode permettant à partir de l'identifiant d'un bâtiment de départ et de l'identifiant d'un bâtiment d'arrivée de retourner un itinéraire (au format JSON). La réponse renvoie la liste des coordonnées à parcourir. Cette méthode sera appelée lors de la demande de calcul d'un itinéraire par l'utilisateur et est accessible à partir de l'URL : http://\textit{IP\_ADRESS}:\textit{PORT}/WebService/service/location/direction/\{id départ\}/\{id arrivée\}. Cette méthode est définie dans la classe \texttt{LocationService}.\\
\end{itemize}

La méthode récupérant le XML décrivant la carte étant la plus longue, c'est une tâche asynchrone qui l'appelle. Les deux autres méthodes étant relativement rapide (une seconde environ), on attend la réponse du WebService (avec une limite fixée à 3 secondes pour ne pas bloquer l'application trop longtemps). 

\newpage

\subsection{Android}
\input{android}

\newpage

\section{Solutions techniques retenues}

\input{arbreDecision}

\newpage

\input{openGL}

\input{itinerairelocal}

\input{triangulation}

\newpage

\section{Déploiement}

\subsection{Local}

Pour utiliser le mode local de l'application android, il est nécessaire d'avoir :
\begin{itemize}
\item installé PostgreSQL, son extension postgis et pgrouting 2.0
\item une base de données nommée sig\_1337 et y importer les fonctions postgis et pgrouting.
\item osm2pgsql afin d'importer les données de la carte de l'université d'Orléans dans la base sig\_1337 (récupérées sur OpenStreetMap).
\item exécuté DataGenerator (package \texttt{data}) pour générer map.xml.
\item copié ce fichier XML dans l'application Android (dossier res/raw).
\item compilé et déployé l'application sur un téléphone Android  \\
\end{itemize}

\subsection{Remote}

Pour utiliser le mode remote de l'application android, il est nécessaire d'avoir :
\begin{itemize}
\item installé PostgreSQL, son extension postgis et pgrouting 2.0
\item une base de données nommée sig\_1337 et y importer les fonctions postgis et pgrouting.
\item osm2pgsql afin d'importer les données de la carte de l'université d'Orléans dans la base sig\_1337 (récupérées sur OpenStreetMap).
\item déployé le WebService sur une machine (local ou non).
\item compilé et déployé l'application sur un téléphone Android.
\end{itemize}

\newpage 

\begin{thebibliography}{9}

\bibitem{compute}
  Mark de Berg \& Otfried Cheong \& Marc van Kreveld \& Mark Overmars ,
  \emph{Computational Geometry: Algorithms and Applications}.
  Springer, Berlin,
  Third Edition,
  2008.

\end{thebibliography}
\appendix
\end{document}
